/* 
 * File:   SumesIguals2.cpp
 * Author: rael
 *
 * Created on 8 de mayo de 2008, 13:49
 */

//Enunciat
//
//Feu un programa que, donat un enter s i una seqüència d'enters x1, x2,..., xn , escrigui el subconjunt (amb repetits o no, però usant cada xi com a molt un cop) més gran en ordre lexicogràfic que té suma s .
//
//Entrada
//
//L'entrada consisteix en un enter s , seguit d'un natural n > 0 , seguit de x1, x2,..., xn .
//
//Sortida
//
//Escriviu el subconjunt més gran lexicogràficament i amb suma s que es pot formar amb x1, x2,..., xn . Si no n'hi ha cap, escriviu "SENSE SOLUCIO". 
//        
#include <stdlib.h>
#include <iostream.h>
/*
 * 
 */
using namespace std;
int cnt = 0;

class par {
public:
    int num;
    bool b;
    bool ms;
};

bool iguals(par[], int, int, int);

int main() {
    int s, n, aux;

    cin >> s;
    cin >> n;

    par x[n];


    for (int i = 0; i < n; i++) {
        cin >> x[i].num;
        x[i].b = true;
        x[i].ms = false;
    }
    bool res = iguals(x, s, n, 0);

    cout << "S =" << s << endl << "N =" << n << endl;
    cout << "bolea" << res << endl;
    for (int i = 0; i < n; i++) {
        cout << "X" << i << " = " << x[i].num <<"["<<x[i].b<<"]"<<"["<<x[i].ms<<"]"<< " - ";
    }
    cout << endl;
}

bool iguals(par x[], int s, int n) {
    cnt++;
    cout << "  count " << cnt << "  i " << i << "  s "<<s<<endl;
    bool b = false;
    x[i].ms = true;

    if (i == n - 1) 
    {
        cout << "dins " << "i.num " << x[i].num << endl;
        if (s == x[i].num) 
        {
            x[i].ms = true;
            return true;
        }
        else 
        {
            return false;
        }
    }
    else 
    {
        i++;
        //x[i].b = false;

        while (i <= n) 
        {
            b = iguals(x, s - x[i].num, n);
            if (b) 
            {
                cout << "if"<<endl;
                x[i].ms = true;
                return true;
            } 
            else 
            {
                cout << "else"<<endl;
                x[i].ms = false;
                i+;
            }
            return false;
        }
    }
    
    bool igual (par[] x, int s, int n, int i)
    {
        if (i != n-1)
        {
            
            if (iguals(x, s - x[i].num, n, i+1));
            {
                x[i].ms=true;
                return true;
            }
            else
            {
                return false;
            }
        }
        else
        {
            if(s == x[i].num) 
            {    
                x[i].ms=true;
                return true;
            }
            else return false;
        }
        
    
    }
    
    

}


